// Hydro submission #[email protected]
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long u64;
int n;
mt19937_64 Rand(time(0));
u64 val[100005], S[100005];
struct Node {
int p, id, k;
bool operator< (const Node &a) {
if (p == a.p) return k < a.k;
return p < a.p;
}
} a[200005], b[200005];
int main(void) {
scanf("%d", &n);
for (int i = 1, x; i <= n; ++i) {
val[i] = Rand();
scanf("%d", &x); a[i * 2 - 1] = {x, i, 0};
scanf("%d", &x); a[i * 2] = {x, i, 1};
scanf("%d", &x); b[i * 2 - 1] = {x, i, 0};
scanf("%d", &x); b[i * 2] = {x, i, 1};
} sort(a + 1, a + n * 2 + 1); sort(b + 1, b + n * 2 + 1);
u64 V = 0;
for (int i = 1; i <= n * 2; ++i)
if (a[i].k) V ^= val[a[i].id];
else S[a[i].id] ^= V;
V = 0;
for (int i = n * 2; i >= 1; --i)
if (!a[i].k) V ^= val[a[i].id];
else S[a[i].id] ^= V;
V = 0;
for (int i = 1; i <= n * 2; ++i)
if (b[i].k) V ^= val[b[i].id];
else S[b[i].id] ^= V;
V = 0;
for (int i = n * 2; i >= 1; --i)
if (!b[i].k) V ^= val[b[i].id];
else S[b[i].id] ^= V;
bool flag = 1;
for (int i = 1; i <= n; ++i) flag &= S[i] == 0;
return puts(flag ? "Yes" : "No");
}
1399A - Remove Smallest | 208A - Dubstep |
1581A - CQXYM Count Permutations | 337A - Puzzles |
495A - Digital Counter | 796A - Buying A House |
67A - Partial Teacher | 116A - Tram |
1472B - Fair Division | 1281C - Cut and Paste |
141A - Amusing Joke | 112A - Petya and Strings |
677A - Vanya and Fence | 1621A - Stable Arrangement of Rooks |
472A - Design Tutorial Learn from Math | 1368A - C+= |
450A - Jzzhu and Children | 546A - Soldier and Bananas |
32B - Borze | 1651B - Prove Him Wrong |
381A - Sereja and Dima | 41A - Translation |
1559A - Mocha and Math | 832A - Sasha and Sticks |
292B - Network Topology | 1339A - Filling Diamonds |
910A - The Way to Home | 617A - Elephant |
48A - Rock-paper-scissors | 294A - Shaass and Oskols |